import { defineStore } from "pinia";
import vueAxios from "@/api/index";
import { DynamicStore } from "@/stores/interface";
import { useGlobalStore } from "./global";
import piniaPersistConfig from "@/config/piniaPersist";
import { update } from "js-md5";
const globalStore = useGlobalStore();
export const useDynamicStore = defineStore({
  id: "dynamic",
  state: (): DynamicStore => ({
    visibleConfig: {}, // 初始化构建对象
    oldModalFormData: [], // 旧表单数据
    ModalFormDataChange: [], // 当前表单数据前一次的变化
    tableData: [], // 主表格数据
    sourthTableData: [], //主表源数据
    fulltextData: [], //全文数据
    tableSelect: [], // 表格多选保存数据
    modalFormData: {}, //表单绑定数据
    fatherObj: {}, //父级对象
    CurrClickRow: null, //当前点击的行
    pageSize: globalStore.pageSize, // 分页大小默认值
    pageIndex: 2, // 记录分页时标记
    isShowPage: true, //是否显示分页
    childLeftClick: false, //子级页面点击左侧树标识
    childVisibleConfig: {}, // 子级表格初始化构建对象
    childTableData: [], //子级表格数据
    childSourthTableData: [], //子级表格源数据
    childTableSelect: [], // 子级表格多选保存数据
    copyData: [], //主表复制数据
    copyChildData: [], //子表复制数据
    childData: [], // 数据表数据（用于获取表名）
    datasheet: [], //数据表集合
    noCatalogStatus: false //// 无分类的标识
  }),
  getters: {},
  actions: {
    // 设置无分类标识
    setNoCatalog(data: any) {
      this.noCatalogStatus = data;
    },
    // 获取初始化对象
    setVisibleConfig(data: any) {
      this.visibleConfig = data;
    },
    // 获取子级表格初始化对象
    setChildVisibleConfig(data: any) {
      this.childVisibleConfig = data;
    },
    // 获取表格多选数据
    setTableSelect(data: any) {
      this.tableSelect = data;
    },
    // 删除主表格勾选数据
    delTableSelectData(data: any) {
      this.tableSelect = this.tableSelect.filter((item: any) => {
        return item.Record_ID != data[0].Record_ID;
      });
    },
    // 获取子级表格多选数据
    setChildTableSelect(data: any) {
      this.childTableSelect = data;
    },
    // 获取表单绑定数据
    setModalFormData(data: any) {
      delete data.checkbox;
      this.modalFormData = data;
    },
    // 保存旧的表单数据
    setOldForm(data: any) {
      delete data.checkbox;
      this.oldModalFormData = data;
    },
    setModalFormDataChange(data: any) {
      delete data.checkbox;
      this.ModalFormDataChange = data;
    },
    // 保存父级对象
    setFatherObj(data: any) {
      this.fatherObj = data;
    },
    setCurrClickRow(data: any) {
      // 添加类型检查和数据验证
      console.log(" 2222222222222222222", data);
      if (data && typeof data === "object") {
        this.CurrClickRow = { ...data }; // 使用浅拷贝避免引用问题
      } else {
        this.CurrClickRow = null;
      }
    },
    // 获取主表格数据
    getTableData(params: any) {
      return new Promise((resolve, reject) => {
        vueAxios.get("Dynamic/CommonGet", params, { noLoading: true }).then((res: any) => {
          if (res.Count > res.List.length) {
            this.isShowPage = true;
          } else {
            this.isShowPage = false;
          }
          resolve(res);
        });
      });
    },
    // 设置主表格数据
    setTableData(data: any) {
      this.tableData = data;
      this.tableData.forEach(item => {
        item.checkbox = false;
      });
    },
    // 设置子级表格数据
    setChildTableData(data: any) {
      this.childTableData = data;
      this.childTableData.forEach(item => {
        item.checkbox = false;
      });
    },
    // 获取主表格源数据
    setSourthTableData(data: any) {
      this.sourthTableData = data;
    },
    // 获取子级表格源数据
    setChildSourthTableData(data: any) {
      this.childSourthTableData = data;
    },
    // 单个添加主表格显示数据
    addTableData(data: any) {
      this.tableData = this.tableData.concat(data);
      this.sourthTableData = this.sourthTableData.concat(data);
    },
    // 单个添加子级表格显示数据
    addChildTableData(data: any) {
      this.childTableData = this.childTableData.concat(data);
      this.childSourthTableData = this.childSourthTableData.concat(data);
    },
    // 编辑主表格数据
    updateTableData(data: any) {
      const index = this.tableData.findIndex(item => item.Record_ID === data.Record_ID); // 更新data数据
      if (index !== -1) {
        // 保留原有的checkbox选中状态
        const originalCheckbox = this.tableData[index].checkbox;
        this.tableData[index] = { ...data, checkbox: originalCheckbox }; // 更新data数据，保留checkbox状态
        this.sourthTableData[index] = { ...data, checkbox: originalCheckbox }; // 更新data数据，保留checkbox状态

        // 同步更新tableSelect中的对应数据，保持选中状态的一致性
        const selectIndex = this.tableSelect.findIndex(item => item.Record_ID === data.Record_ID);
        if (selectIndex !== -1) {
          this.tableSelect[selectIndex] = { ...data, checkbox: originalCheckbox };
        }
      }
    },
    // 编辑子级表格数据
    updateChildTableData(data: any) {
      const index = this.childTableData.findIndex(item => item.Record_ID === data.Record_ID); // 更新data数据
      if (index !== -1) {
        // 保留原有的checkbox选中状态
        const originalCheckbox = this.childTableData[index].checkbox;
        this.childTableData[index] = { ...data, checkbox: originalCheckbox }; // 更新data数据，保留checkbox状态
        this.childSourthTableData[index] = { ...data, checkbox: originalCheckbox }; // 更新data数据，保留checkbox状态
      }
    },
    // 获取全文数据
    setFulltextData(data: any) {
      this.fulltextData = data;
    },
    // 设置分页大小
    setPageSize(size: number) {
      this.pageSize = size;
    },
    // 传参时用于重置,不传参时自增
    setPageIndex(status?: boolean) {
      if (status) {
        this.pageIndex = 2; // 重置
      } else {
        this.pageIndex++;
      }
    },
    // 控制分页是否显示
    setIsShowPage(isShow: boolean) {
      this.isShowPage = isShow;
    },
    // 切换子级左侧树标识
    setChildLeftClick(isTrue: boolean) {
      this.childLeftClick = isTrue;
    },
    // 设置主表复制数据
    setCopyData(data: any) {
      this.copyData = data;
    },
    // 设置子表复制数据
    setChildCopyData(data: any) {
      this.copyChildData = data;
    },
    // 设置数据表数据
    setChildData(data: any[]) {
      this.childData = data;
    },
    // 获取数据表
    setDatasheet(data: any[]) {
      this.datasheet = data;
    }
  },
  persist: piniaPersistConfig("dynamic", ["fatherObj"])
});
